/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controle;

import Interface.FormQuestao;
import Modelo.Questao;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

/**
 * Classe responsável pelo controla da tabela formulários
 * @author Jonas Gualberto Diel
 */
public class ControlaQuestao {

    Questao questao = null;
    JTable tbQuestao = null;
    ResultSet result = null;

    public ControlaQuestao() {

    }

    public ControlaQuestao(Questao questao, JTable tbQuestao) {
        this.questao = questao;
        this.tbQuestao = tbQuestao;
    }

    public boolean excluirQuestao()
    {
        int questionId = questao.getQuestionId();
        try
        {
            int resultado = FormQuestao.stmt.executeUpdate(
            "DELETE FROM rshQuestion WHERE questionId = '"+questionId+"'");
            if (resultado != 0) {
                return true;
            }
        } catch (Exception e) {
            return false;
        }
        return false;
    }

    //Insere uma novo formulário na base de dados
    public boolean inserirQuestao() {
        
        //Define os atributos do objeto
        int formId = questao.getFormId();
        int questionCategoryId = questao.getQuestionCategoryId();
        String description = questao.getDescription();
        boolean isMulti = questao.getIsMulti();
        boolean isRequired = questao.getIsRequired();
        boolean isDescriptive = questao.getIsDescriptive();

        try {
            
            int resultado = FormQuestao.stmt.executeUpdate(
            "insert into rshquestion (formid,questioncategoryid,description,ismulti,isrequired,isdescriptive) values "
          + "('"+formId+"', '"+questionCategoryId+"','"+description+"','"+isMulti+"', '"+isRequired+"','"+isDescriptive+"')");

            if (resultado != 0) {
                return true;
            }
        } catch (Exception e) {
            return false;
        }
        return false;
    }

    //Edita um formulário na base de dados
    public boolean editarQuestao() {

        //Define os atributos do objeto
        int questionId = questao.getQuestionId();
        int formId = questao.getFormId();
        int questionCategoryId = questao.getQuestionCategoryId();
        String description = questao.getDescription();
        boolean isMulti = questao.getIsMulti();
        boolean isRequired = questao.getIsRequired();
        boolean isDescriptive = questao.getIsDescriptive();

        try {

            int resultado = FormQuestao.stmt.executeUpdate(
            "update rshquestion set formId = '"+formId+"', questionCategoryId = '"+questionCategoryId+"', description = '"+description+"', isMulti = '"+isMulti+"', isRequired = '"+isRequired+"', isDescriptive = '"+isDescriptive+"' WHERE questionId = '"+questionId+"'");

            if (resultado != 0) {
                return true;
            }
        } catch (Exception e) {
            return false;
        }
        return false;
    }

    //Popula os registros da base de dados na tabela
    public void popularTabela(Questao filtros) {

        Vector<String> cabecalhos = new Vector<String>();
        Vector dadosTabela = new Vector();
        cabecalhos.add("Codigo");
        cabecalhos.add("Formulário");
        cabecalhos.add("Categoria");
        cabecalhos.add("Descriçao");
        cabecalhos.add("Múltipla escolha");
        cabecalhos.add("Obrigatória");
        cabecalhos.add("Descritiva");

        try {
            String sql = "SELECT A.questionId, B.description, C.description, A.description, (SELECT CASE WHEN A.isMulti THEN 'Sim' ELSE 'Não' END), (SELECT CASE WHEN A.isRequired THEN 'Sim' ELSE 'Não' END), (SELECT CASE WHEN A.isDescriptive THEN 'Sim' ELSE 'Não' END) FROM rshQuestion A LEFT JOIN rshForm B ON (A.formId=B.formId) LEFT JOIN rshquestioncategory C ON (A.questioncategoryid=C.questioncategoryid)";

            //Filtros
            if (filtros != null)
            {
                String where = "";
                if ( filtros.getQuestionId() > 0)
                {
                    where = where + "AND A.questionid = '" + filtros.getQuestionId()+"'";
                }
                if ( filtros.getFormId() > 0)
                {
                    where = where + "AND A.formid = '" + filtros.getFormId()+"'";
                }
                if ( filtros.getQuestionCategoryId() > 0)
                {
                    where = where + "AND A.questioncategoryid = '" + filtros.getQuestionCategoryId()+"'";
                }
                if (filtros.getDescription().length() > 0)
                {
                    where = where + "AND A.description ILIKE '"+filtros.getDescription()+"%'";
                }                                              
                if ( where.length() > 0)
                {
                    sql = sql + " WHERE " + where.replaceFirst("AND", " ");
                }
            }
            sql = sql + "ORDER BY questionid ASC";
            
            result = FormQuestao.stmt.executeQuery(sql);

            while (result.next()) {
                Vector<Object> linha = new Vector<Object>();
                linha.add(result.getInt(1));               
                linha.add(result.getString(2));     
                linha.add(result.getString(3));                
                linha.add(result.getString(4));                
                linha.add(result.getString(5));                
                linha.add(result.getString(6));                
                linha.add(result.getString(7));                                
                dadosTabela.add(linha);
            }
        } catch (Exception e) {
            System.out.println("problemas para popular tabela...");
            System.out.println(e);
        }
        tbQuestao.setModel(new DefaultTableModel(dadosTabela, cabecalhos) {

            @Override
            public boolean isCellEditable(int row, int column) {
                return false; //Não permite editar nenhuma coluna direto na tabela
            }
        });

        // permite seleção de apenas uma linha da tabela
        tbQuestao.setSelectionMode(0);

        // redimensiona as colunas de uma tabela
//        TableColumn column = null;
//        for (int i = 0; i < 2; i++) {
//            column = tbQuestao.getColumnModel().getColumn(i);
//            switch (i) {
//                case 0:
//                    column.setPreferredWidth(17);
//                    break;
//                case 1:
//                    column.setPreferredWidth(140);
//                    break;
//            }
//        }
    }

    /**
     * Recebe o código do formulário e retorna objeto com os dados populados
     * @param personId -- Código do formulário
     * @return objeto do formulário
     */
    public Questao obterQuestao(int questionId)
    {
        try
        {
            String sql = "SELECT questionId, formId, questioncategoryId, description, isMulti, isRequired, isDescriptive FROM rshQuestion  WHERE questionid = '" + questionId + "'";
            result = FormQuestao.stmt.executeQuery(sql);
            while (result.next())
            {
                Questao dataQuestao = new Questao();
                dataQuestao.setQuestionId(result.getInt(1));
                dataQuestao.setFormId(result.getInt(2));
                dataQuestao.setQuestionCategoryId(result.getInt(3));
                dataQuestao.setDescription(result.getString(4));
                dataQuestao.setIsMulti(result.getBoolean(5));
                dataQuestao.setIsRequired(result.getBoolean(6));
                dataQuestao.setIsDescriptive(result.getBoolean(7));
                                
                return dataQuestao;
            }
        }
        catch (Exception e)
        {
            System.out.println("problemas para popular os campos...");
            System.out.println(e);
        }
        return null;
    }
}
